//
//  HMTextView.swift
//  EmoticonKeyboard
//
//  Created by 周英培 on 16/6/2.
//  Copyright © 2016年 周英培. All rights reserved.
//

import UIKit

class HMTextView: UITextView {

    func insertEmoticon(em:HMEmoticon) {
    
        //如果点击的是空白的模型
        if em.isSpace {
            
            return
            
        }
        
        //点击删除按钮 进行删除东西
        if em.isDelete {
            
          deleteBackward()
            
            return
            
        }
        
        //点击的是emolj表情
        if (em.emoji != nil) {
            
            //替换字符串到对应的光标下 即显示到textview上去
            replaceRange(selectedTextRange!, withText: em.emoji ?? "")
            return
            
        }
        
        //程序走到这个地方 意味用户点击的是 表情图片
        //实现图文混排 要依靠属性字符串
        //将图片添加到属性文本中 需要使用 附件  对象
        //1.获取附件对象
        
        let imageText = HMTextAttachment.emoticonImageToImageText(em, font: font!)
     
        //4.将textView.attributedText 转换为可变的属性文本
        let strM = NSMutableAttributedString(attributedString: attributedText)
        
        //5.1 在替换之前 记录光标所在位置
        let range = selectedRange
        
        //5.替换属性文本
        strM.replaceCharactersInRange(selectedRange, withAttributedString: imageText)
        
        //6.重新设置textView.attributedText
        attributedText = strM
        
        //7. 恢复光标的位置
        selectedRange = NSMakeRange(range.location + 1, 0)
        
        //主动调用协议方法  为了点击表情图片时发送按钮也可以交互  并且 占位文本 消失
         self.delegate?.textViewDidChange?(self)
      }
    
    //获取普通文本+图片对应的chs
    func fullText() -> String {
    
        //获取属性文本对应的属性
        let attr = attributedText
        var strM = String()
        
        attr.enumerateAttributesInRange(NSMakeRange(0, attr.length), options: []) { (dict , range, _) in
            
            if let attachment = dict["NSAttachment"] as? HMTextAttachment {
                
                //图片属性文本
                //从附件对象中获取表情图片对应的文字
                strM += (attachment.chs ?? "")
                
            } else {
                
                //正常的属性文本
                let subStr = (self.text as NSString).substringWithRange(range)
                strM += subStr
            }
            
        }
        
        return strM
    
    }
}
